package samber

import (
	"fmt"
	"github.com/samber/lo"
)

// Empty 定义一个类型返回空
func Empty() {
	res := lo.Empty[string]()
	fmt.Printf("%v \n", res)
}

// EmptyableToPtr 非零的话就返回一个副本指针 否则是 nil
func EmptyableToPtr() {
	res := lo.EmptyableToPtr("")
	fmt.Printf("%v \n", res)
}

type myError struct {
}

func (e myError) Error() string {
	return "my error"
}

// ErrorsAs 错误的快捷方式
func ErrorsAs() {
	doSomething := func() error {
		return &myError{}
	}
	err := doSomething()
	if rateLimitErr, ok := lo.ErrorsAs[*myError](err); ok {
		fmt.Printf("is type myError, err: %s", rateLimitErr.Error()) // 成立
	} else {
		fmt.Printf("is not type myError")
	}
	fmt.Printf("\n")
}

// Every 子集是否都在集合里面
func Every() {
	list := []int{1, 2, 0}
	res := lo.Every(list, []int{1})
	fmt.Printf("%v \n", res) // true
	res = lo.Every(list, []int{-1})
	fmt.Printf("%v \n", res) // false
	res = lo.Every(list, []int{})
	fmt.Printf("%v \n", res) // true
}

// EveryBy 按照自己的逻辑数组每个是否都符合要求
func EveryBy() {
	list := []int{1, 2, 0}
	res := lo.EveryBy(list, func(item int) bool {
		return item > 1
	})
	fmt.Printf("%v \n", res) // false
}
